package main

import (
	"fmt"
)

// Go中字符类型的使用
func main() {
	var c1 byte = 'a'
	var c2 byte = '0'

	// 当我们直接输出byte值，就是输出对应的字符的码值
	fmt.Println("c1=", c1)
	fmt.Println("c2=", c2)
	// 如果我们希望输出对应字符，需要使用格式化输出
	fmt.Printf("c1=%c c2=%c \n", c1, c2)

	// var c3 byte = "北" // overflow 内存溢出
	// var c3 int = "北" // 双引号 报错
	var c3 int = '北' // overflow 内存溢出
	fmt.Printf("c3=%c c3对应码值=%d \n", c3, c3)

	var c4 int = 22269 // 22269 -> '国'
	fmt.Printf("c4=%c", c4)

	var c5 int = 120 // 120 -> 'x'
	fmt.Printf("c5=%c \n", c5)

	// 字符类型是可以进行运算的，相当于一个整数，运算时是按照码值进行
	var n1 = 10 + 'a'
	fmt.Println("n1=", n1)

	var n2 = '中' + '国'
	fmt.Println("n2=", n2)
	fmt.Printf("n2=%c \n", n2)

	var n3 int = '中'
	var n4 int = '国'
	fmt.Printf("%c%c", n3, n4)
}

/*
	C语言中，%是转义符，也就是和%一起出现的后面的内容会转义后输出，这三种输出的意义是不同的：

	1、%d，表示按整型输出后面给出的变量的值。
	2、%%d ，这就会被拆成两部分看待，一是“%%”在C语言中就是输出一个“%”，而是“d”就是一个普通字符，所以当“%%d”在一起时，其含义就是输出“%d”这两个字符。
	3、%%%d ，3个%在一起，进行拆分的话，%%代表一个“%”字符，后面的%d又代表整型输出变量的值，所以当“%%%d”一起时，其最终含义就是输出一个字符%号再接着按整型输出变量的值。

	为了加深理解，我们通过几个例子来了解：
	例如：

	int i=4;
	printf("%d\n",i);//此条输出结果为：4
	printf("%%d\n");//此条语句输出结果为：%d
	printf("%%%d\n",i,i);//此条语句输出结果为：%4

	%c 可以理解为 char
*/
